package projetomsn.Server;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Classe usada para as configurações do servidor
 */
public class ServerSettings {

    /**
     * endereço do driver do banco de dados
     */
    private static final String DB_DRIVER = "com.mysql.jdbc.Driver";
    /**
     * endereço do banco de dados
     */
    private static final String DB_URL = "jdbc:mysql://localhost:3306/humberto";
    /**
     * nome do usuário do banco de dados
     */
    static final String DB_USER = "root";
    /**
     * senha do banco de dados
     */
    private static String DB_PASSWORD = "0379981";
    /**
     * atributo de conexão com o banco de dados
     */
    private static Connection connection;
    /**
     * atributo de 
     */
    private Statement statement;
    /**
     * resultado da consulta
     */
    private ResultSet resultSet;
    /**
     * identificador da linha da tabela
     */
    public static int id;
    /**
     * nome do servidor
     */
    public static String nome;
    /**
     * endereço do servidor
     */
    public static String endereço_servidor;
    /**
     * endereço de multicast
     */
    public static String endereço_de_multicast;
    /**
     * porta de recebimento de multicast
     */
    public static int porta_recebimento_multicast;
    /**
     * atributo de porta de envio de multicast
     */
    public static int porta_envio_multicast;
    /**
     * atributo de porta do servidor
     */
    public static int porta_servidor;
    /**
     * tamanho da mensagem enviada e recebida
     */
    public static int tamanho_mensage;
    /**
     * separa elementos dentro da mensagem
     */
    public static String marca = "&&#*#&&";
    /**
     * separa o nome do usuario da mensagem enviada
     */
    public static String separador = ">>>";
    /**
     * string que envia mensagem para desconectar do servidor
     */
    public static String DISCONNECT_STRING;

    /**
     * Construtor da classe ServerSettings o qual inicializa as variáveis
     */
    public ServerSettings() {

        id = 1;
        nome = "localhost";
        endereço_servidor = "127.0.0.1";
        endereço_de_multicast = "239.0.0.1";
        porta_recebimento_multicast = 5555;
        porta_envio_multicast = 5554;
        porta_servidor = 12345;
        tamanho_mensage = 512;
        marca = "&&#*#&&";
        separador = ">>>";
        print("Obtendo informações do servidor...\n");
    }

    /**
     * Conecta o servidor ao banco de dados
     */
    public static void connect() {

        try {
            Class.forName(DB_DRIVER);
            connection = (Connection) DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
            print("Conectando com o banco de dados...\n");

        } catch (ClassNotFoundException Driver) {

            print("Driver nao encontrado");
        } catch (SQLException Fonte) {

            print("Nao conectou ao banco erro na fonte");

        }


    }

    /**
     * Desconecta o servidor do banco de dados
     */
    public static void desconnect() {

        try {
            connection.close();
            print("Informações obtidas com sucesso.\n");
            print("Desconectando do banco de dados.\n");

        } catch (SQLException erroSQL) {
        }
    }

    /**
     * Obtém configurações do servidor armazenadas no banco
     */
    public static void getServerDefaultSettings() throws SQLException {

        connect();

        String query = "SELECT * FROM server_settings ";

        // cria estado de java
        Statement st = (Statement) connection.createStatement();

        // executa a fila, e pega o resultado
        ResultSet rs = st.executeQuery(query);

        rs.next();


        id = Integer.parseInt(rs.getString("id"));
        nome = rs.getString("name");
        endereço_servidor = rs.getString("address");
        endereço_de_multicast = rs.getString("multicast_address");
        porta_recebimento_multicast = Integer.parseInt(rs.getString("multicast_listening_port"));
        porta_envio_multicast = Integer.parseInt(rs.getString("multicast_sending_port"));
        porta_servidor = Integer.parseInt(rs.getString("server_port"));
        tamanho_mensage = Integer.parseInt(rs.getString("message_size"));
        marca = "&&#*#&&";
        separador = ">>>";


        st.close();

        desconnect();
        print("Dados do servidor:\n");
        print("Id do Servidor: " + id
                + " \nNome do Servidor: " + nome
                + " \nEndereço do Servidor:  " + endereço_servidor
                + " \nEndereço de multicast:  " + endereço_de_multicast
                + " \nPorta para recebimento de multicast: " + porta_recebimento_multicast
                + " \nPorta para envio de multicast: " + porta_envio_multicast
                + " \nPorta do Servidor: " + porta_servidor
                + " \nTamanho da memsagem: " + tamanho_mensage);
    }

    /**
     * Imprime textos contendo informaçôes do servidor
     */
    private static void print(String text) {
        System.out.println(text);
    }
}
